package com.framework.base.taglib.ui;

import java.util.Locale;
import java.util.ResourceBundle;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

import com.framework.base.struts.Result;
import com.framework.base.util.BeanUtil;
import com.framework.base.util.StringUtil;
import com.framework.main.sys.module.domain.ModuleOperationVO;
import com.framework.main.sys.module.domain.ModuleVO;
import com.framework.main.sys.module.service.ModuleService;

/**
 * @Description:功能描述：导航标签 未完成的功能：定义一个navigationbar的隐藏值，供以后日志使用，标识位置。
 * 
 * @Company: www.51wuxia.com
 * @author：www.51wuxia.com
 * @version 1.0
 */
@SuppressWarnings("serial")
public class NavigationbarTag extends BodyTagSupport {
	private boolean display = true;// 是否显示按钮
	private String value; // 位置 同时也可以作为菜单id的值
	private String moduleId; // 模块编号
	private String operateId;// 操作编号
	private String showContentType;// 用于处理显示类型 定义 1代表只显示当前菜单的文本

	public int doStartTag() throws JspException {
		String context = ((HttpServletRequest) pageContext.getRequest())
				.getContextPath();
		JspWriter out = pageContext.getOut();
		ModuleService moduleService = (ModuleService) BeanUtil.getServiceBeanById("moduleService");
		StringBuilder sb = new StringBuilder();
		
		sb.append("<input type=\"hidden\" name=\"queryMap.menuid\" value=\"")
		.append(StringUtil.nullToEmpty(getModuleId()).replaceAll("&gt;",">"))
		.append("\">");
		if (!StringUtil.isNullorEmpty(getValue())) {
			String op=value;
			String path=op.replace("_", ".").toLowerCase();
			String[] values=op.split("_");
			if (values.length>=2) {
				String up=values[values.length-1].substring(0, 1);
				String low=values[values.length-1].substring(1, values[values.length-1].length()).toLowerCase();	
				ResourceBundle v=null;
				if(values[0].equals("SYS")){
					v = ResourceBundle.getBundle("com.framework.main."+path+".action."+up+low+"Action", Locale.getDefault());
				}else{
					v = ResourceBundle.getBundle("com.oa."+path+".action."+up+low+"Action", Locale.getDefault()); 
				}	            
				value=v.getString(value); 
				v=ResourceBundle.getBundle("globalMessages", Locale.getDefault());		    
				if (values.length==2) {
					value=v.getString("now")+":"+v.getString("Home")+"&gt;&gt;"+v.getString(values[0])+"&gt;&gt;"+value;
				}
	            if (values.length==3) {
	            	value=v.getString("now")+":"+v.getString("Home")+"&gt;&gt;"+v.getString(values[0])+"&gt;&gt;"+v.getString(values[1])+"&gt;&gt;"+value;
				}			
			}			
			sb.append("<input type=\"hidden\" name=\"navigationbar\" value=\"")
					.append(StringUtil.nullToEmpty(value).replaceAll("&gt;",
							">"))
					// 定义一个navigationbar的隐藏值，供以后日志使用，标识位置。
					.append("\">")
					.append("<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"")
					.append("bordercolor=\"#FFFFFF\" class=\"where\">")					
					.append("<tr>")	;
			
			sb.append("<td  class=\"frame_main_td1\">").append("<div class='home' style='border-bottom:#cce1f2;'><b><img src='")
			.append(context)
			.append("/common/images/home_03.png' width='16' height='15'></b>")
					.append(value).append("</div>").append("</td>").append("</tr>")
					.append("</table>");
		} else {
			if (!StringUtil.isNullorEmpty(getOperateId())) {
				try {
					ModuleOperationVO moduleOperationVo=moduleService.getModuleOperationVOById(getOperateId());
					this.setModuleId(moduleOperationVo.getModuleidf());
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			
			if (!StringUtil.isNullorEmpty(getModuleId())) {
				try {
					Result result = moduleService.getById(getModuleId());
					ModuleVO moduleVo = (ModuleVO) result.getVo();
					String currentResult="";
					int i=0;
					while(moduleVo!=null){
						if(i==0){
							currentResult=moduleVo.getNamef()+currentResult;
						}else{
							currentResult=moduleVo.getNamef()+"&gt;&gt;"+currentResult;
						}
						i++;
						Result result1 = moduleService.getById(moduleVo.getParentIdf());
						moduleVo=(ModuleVO) result1.getVo();
					}
					sb.append("<input type=\"hidden\" name=\"navigationbar\" value=\"")
					.append(StringUtil.nullToEmpty(currentResult).replaceAll("&gt;",
							">"))
					// 定义一个navigationbar的隐藏值，供以后日志使用，标识位置。
					.append("\">")
					.append("<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"")
					.append("bordercolor=\"#FFFFFF\" class=\"where\">")
					.append("<tr>");				
		
			sb.append("<td  class=\"frame_main_td1\">").append("<div class='home' style='border-bottom:#cce1f2;'><b><img src='")
			.append(context)
			.append("/common/images/home_03.png' width='16' height='15'></b>").append("当前位置：")
					.append(currentResult).append("</div>").append("</td>").append("</tr>")
					.append("</table>");
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

		}
		sb.append("<br>");
		try {
			if(!StringUtil.isNullorEmpty(getShowContentType())){
				Result result = moduleService.getById(getModuleId());
				ModuleVO moduleVo = (ModuleVO) result.getVo();
				sb=new StringBuilder(moduleVo.getNamef());
			}
			out.write(sb.toString());
		} catch (Exception e) {
			e.printStackTrace();
			throw new JspException("错误信息: 在生成导航标签时出错！");
		}
		return super.doStartTag();
	}

	public boolean isDisplay() {
		return display;
	}

	public void setDisplay(boolean display) {
		this.display = display;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

	public String getModuleId() {
		return moduleId;
	}

	public void setModuleId(String moduleId) {
		this.moduleId = moduleId;
	}

	public String getOperateId() {
		return operateId;
	}

	public void setOperateId(String operateId) {
		this.operateId = operateId;
	}

	public String getShowContentType() {
		return showContentType;
	}

	public void setShowContentType(String showContentType) {
		this.showContentType = showContentType;
	}

}
